package vistas.ventanas;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTextField;

import daos.UsuariosDAO;
import entidades.Usuario;
import entidades.enums.Privilegio;

public class EditarUsuario extends JDialog {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public static final int MODIFICAR = 3;
	public static final int ELIMINAR = 4;
	public static final int AGREGAR = 5;
	private JTextField id, login, password;
	private JComboBox<Privilegio> tipo;
	private JButton editar, cancelar;
	private Integer FLAG;
	private UsuariosDAO usuarioDAO;

	public EditarUsuario() {
		setTitle("Agregar nuevo Usuario al Sistema");
		instanciar_componentes();
		cargar_componentes();
		listeners();
		pack();
		setModal(true);
		setVisible(true);
	}

	public EditarUsuario(Integer identificador, Integer flag) {
		setTitle("Datos del usuario");
		instanciar_componentes();
		FLAG = flag;
		cargar_componentes();
		listeners();
		cargar_valores(identificador);
		pack();
		setModal(true);
		setVisible(true);

	}

	private void cargar_valores(Integer identificador) {
		Usuario usuario;
		usuario = usuarioDAO.obtenUsuario(identificador);
		id.setText(String.valueOf(usuario.getId()));
		login.setText(usuario.getLogin());
		password.setText(usuario.getContrasena());
		tipo.setSelectedItem(usuario.getPrivilegio());
		if (FLAG == MODIFICAR) {
			id.setEnabled(false);
			editar.setText("Modificar");
			tipo.setEnabled(false);
			login.setEditable(false);
		}
		if (FLAG == ELIMINAR) {
			id.setEnabled(false);
			login.setEnabled(false);
			password.setEnabled(false);
			tipo.setEnabled(false);
			editar.setText("Eliminar");
		}
	}

	
	private void cargar_componentes() {
		if(FLAG!= AGREGAR)
			add(id);
		add(login);
		add(password);
		add(tipo);
		add(editar);
		add(cancelar);

	}

	private void instanciar_componentes() {
		FLAG = new Integer(AGREGAR);
		usuarioDAO = new UsuariosDAO();
		JPanel panel = new JPanel();
		setContentPane(panel);
		id = new JTextField();
		configurar_componente(id, "Id");
		login = new JTextField();
		configurar_componente(login, "Login");
		password = new JTextField();
		configurar_componente(password, "Contraseña");
		tipo = new JComboBox<Privilegio>();
		instanciarTipo(tipo);
		editar = new JButton("Aceptar");
		cancelar = new JButton("Cancelar");
	}

	private void configurar_componente(JComponent tf, String s) {
		tf.setBorder(BorderFactory.createTitledBorder(s));
		tf.setPreferredSize(new Dimension(150, 40));
	}

	private void instanciarTipo(JComboBox<Privilegio> cb) {
		cb.setBorder(BorderFactory.createTitledBorder("Privilegios"));
		cb.setPreferredSize(new Dimension(150, 40));
		cb.addItem(Privilegio.administrador);
		cb.addItem(Privilegio.estandar);
		
	}
	
	private void listeners() {
		editar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					Usuario usuario = new Usuario();
					usuario.setLogin(login.getText());
					usuario.setContrasena(password.getText());
					usuario.setPrivilegio((Privilegio) tipo.getSelectedItem());
					

					if (FLAG == AGREGAR)
						usuarioDAO.guardaUsuario(usuario);
					if (FLAG == MODIFICAR) {
						usuario.setId(Integer.parseInt(id.getText()));
						usuarioDAO.actualizaUsuario(usuario);
					}
					if (FLAG == ELIMINAR) {
						usuario.setId(Integer.parseInt(id.getText()));
						usuarioDAO.eliminaUsuario(usuario);
					}
					dispose();

				} catch (Exception e2) {
					System.out
							.println("Hubo un error");
				}

			}
		});

		cancelar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				dispose();

			}
		});

	}

}
